package com.aliang.shopping.model.converter;

import com.aliang.shopping.model.dto.common.UpdatePasswordDTO;
import com.aliang.shopping.model.dto.common.UpdateStatusDTO;
import com.aliang.shopping.model.dto.userInfo.UserInfoInsertDTO;
import com.aliang.shopping.model.dto.userInfo.UserInfoUpdateDTO;
import com.aliang.shopping.model.po.UserInfo;
import com.aliang.shopping.model.vo.CommonUserInfoVO;
import com.aliang.shopping.model.vo.UserInfoVO;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;

/**
 * 管理员数据转换器
 */
@Mapper(componentModel = "Spring")
public interface UserInfoConverter {

    /**
     * 将管理员插入数据传输对象转换为管理员实体
     *
     * @param insertDTO
     * @return
     */
    UserInfo toPoByInsertDTO(UserInfoInsertDTO insertDTO);

    /**
     * 将管理员更新数据传输对象转换为管理员实体
     *
     * @param updateDTO
     * @return
     */
    UserInfo toPoByUpdateDTO(UserInfoUpdateDTO updateDTO);

    /**
     * 将管理员更新状态数据传输对象转换为管理员实体
     *
     * @param updateDTO
     * @return
     */
    UserInfo toPoByUpdateStaticDTO(UpdateStatusDTO updateDTO);

    /**
     * 将管理员更新密码数据传输对象转换为管理员实体
     *
     * @param updateDTO
     * @return
     */
    @Mapping(target = "password", expression = "java(com.aliang.shopping.util.PasswordUtil.encrypt(updateDTO.getNewPassword()))")
    UserInfo toPoByUpdatePasswordDTO(UpdatePasswordDTO updateDTO);

    UserInfo toPoByIdWithPwd(Long id, String password);

    CommonUserInfoVO toCommonUserInfoVO(UserInfo userInfo);

    UserInfoVO toVo (UserInfo userInfo);
}
